স্প্রিং ডেটা জেপিএ @Query অ্যানোটেশন ব্যবহার করে কাস্টম কোয়েরি তৈরি করা যায়। এই অ্যানোটেশনটি ব্যবহার করে আপনি JPQL (Java Persistence Query Language) অথবা SQL কোয়েরি সরাসরি মেথডে লিখতে পারেন। স্প্রিং ডেটা জেপিএ আপনাকে Custom Query লেখার সুযোগ দেয়, যাতে আপনি আরও জটিল বা নির্দিষ্ট ডেটাবেস অপারেশন করতে পারেন যেগুলি স্প্রিং রেপোজিটরি থেকে সরাসরি পরিচালিত হয়।
@Query অ্যানোটেশনটি আপনার JPA Repository ইন্টারফেসের মধ্যে ব্যবহার করা হয় এবং এতে কোয়েরি লেখা হয় যা JPQL বা SQL হিসেবে এক্সিকিউট হতে পারে। এটি এক্সপ্রেশন প্যারামিটারগুলির সাহায্যে আরও ডাইনামিকভাবে ব্যবহার করা যেতে পারে।
@Query অ্যানোটেশন ব্যবহার করে Custom Query লেখার উদাহরণ
Step ১: Entity ক্লাস তৈরি করা
ধরা যাক, আমরা একটি Employee ক্লাস ব্যবহার করছি যা আমাদের ডেটাবেসের employee টেবিলের প্রতিনিধিত্ব করে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
private double salary;
// Getters and Setters
}
এখানে, Employee ক্লাসের মধ্যে id, name, department, এবং salary ফিল্ড রয়েছে।
Step ২: Custom Query এর জন্য Repository তৈরি করা
স্প্রিং ডেটা জেপিএ JpaRepository অথবা CrudRepository ইন্টারফেসের মাধ্যমে ডেটাবেস অ্যাক্সেস পরিচালনা করা যায়। কাস্টম কোয়েরি লেখার জন্য, @Query অ্যানোটেশন ব্যবহার করা হয়।
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
// Custom JPQL Query using @Query
@Query("SELECT e FROM Employee e WHERE e.department = ?1")
List<Employee> findEmployeesByDepartment(String department);
// Custom SQL Query using @Query
@Query(value = "SELECT * FROM employee WHERE salary > ?1", nativeQuery = true)
List<Employee> findEmployeesWithSalaryGreaterThan(double salary);
// Custom JPQL Query with named parameter
@Query("SELECT e FROM Employee e WHERE e.name = :name")
List<Employee> findEmployeeByName(String name);
}
Explanation:
- findEmployeesByDepartment:
- JPQL কোয়েরি ব্যবহার করে
Employeeটেবিল থেকে নির্দিষ্ট department এর সমস্ত কর্মচারীকে খুঁজে বের করা হচ্ছে। ?1প্যারামিটারটিdepartmentনামে আর্গুমেন্ট গ্রহণ করে।
- JPQL কোয়েরি ব্যবহার করে
- findEmployeesWithSalaryGreaterThan:
- Native SQL কোয়েরি ব্যবহার করে, যেখানে
nativeQuery = trueব্যবহার করা হয় এবং এটি সরাসরি ডেটাবেসের টেবিলemployeeথেকেsalaryএর ভিত্তিতে রেকর্ড নির্বাচন করে।
- Native SQL কোয়েরি ব্যবহার করে, যেখানে
- findEmployeeByName:
- JPQL কোয়েরি ব্যবহার করে, এখানে
nameপ্যারামিটারকে নামের ভিত্তিতে কর্মচারীদের খুঁজে বের করা হচ্ছে।:nameনামের সঙ্গে যুক্ত একটি named parameter ব্যবহার করা হয়েছে।
- JPQL কোয়েরি ব্যবহার করে, এখানে
Step ৩: Service ক্লাস তৈরি করা
স্প্রিং সার্ভিস ক্লাসের মধ্যে Repository ইনজেক্ট করে আপনি ডেটাবেসের উপর কাস্টম কোয়েরি প্রয়োগ করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public List<Employee> getEmployeesByDepartment(String department) {
return employeeRepository.findEmployeesByDepartment(department);
}
public List<Employee> getEmployeesWithSalaryGreaterThan(double salary) {
return employeeRepository.findEmployeesWithSalaryGreaterThan(salary);
}
public List<Employee> getEmployeeByName(String name) {
return employeeRepository.findEmployeeByName(name);
}
}
এখানে, EmployeeService ক্লাসে EmployeeRepository ইনজেক্ট করা হয়েছে এবং স্প্রিং ডেটা জেপিএ @Query অ্যানোটেশন ব্যবহার করে কাস্টম কোয়েরি মেথড কল করা হয়েছে।
Step ৪: Controller ক্লাস তৈরি করা
স্প্রিং MVC ব্যবহার করে ডেটা ফেচ করা এবং ক্লায়েন্টের কাছে পাঠানোর জন্য একটি Controller ক্লাস তৈরি করা হয়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@GetMapping("/employees/department/{department}")
public List<Employee> getEmployeesByDepartment(@PathVariable String department) {
return employeeService.getEmployeesByDepartment(department);
}
@GetMapping("/employees/salary/{salary}")
public List<Employee> getEmployeesWithSalaryGreaterThan(@PathVariable double salary) {
return employeeService.getEmployeesWithSalaryGreaterThan(salary);
}
@GetMapping("/employees/name/{name}")
public List<Employee> getEmployeeByName(@PathVariable String name) {
return employeeService.getEmployeeByName(name);
}
}
এখানে, EmployeeController ক্লাসের মধ্যে EmployeeService ব্যবহার করে ডেটা রিট্রিভ করা হয়েছে এবং প্রতিটি রুটে কাস্টম কোয়েরি মেথড কল করা হয়েছে।
@Query অ্যানোটেশন ব্যবহারের সুবিধা
- কাস্টম কোয়েরি লেখা সহজ:
@Queryঅ্যানোটেশন ব্যবহারের মাধ্যমে স্প্রিং ডেটা জেপিএতে খুব সহজে কাস্টম কোয়েরি লেখা যায়, যা সাধারণ JPA বা SQL কোয়েরি হয়। - কাস্টমাইজযোগ্য কোয়েরি: একাধিক প্যারামিটার এবং শর্তাবলী নিয়ে জটিল কোয়েরি তৈরি করা যায়।
- প্রফেশনাল এবং কার্যকরী কোড: স্প্রিং ডেটা জেপিএ JPQL এবং Native SQL কোয়েরি সমর্থন করে, যা ডেটাবেসের নিকটবর্তী কার্যকরী সমাধান প্রদান করে।
- মেটাডাটা অ্যানোটেশন: স্প্রিং Named Parameters এবং Positional Parameters সমর্থন করে, যা কোডকে আরও ক্লিন এবং পরিষ্কার রাখে।
উপসংহার
স্প্রিং ডেটা জেপিএ @Query অ্যানোটেশন ব্যবহার করে কাস্টম কোয়েরি লেখা খুবই সহজ এবং কার্যকরী। এটি স্প্রিং ডেভেলপারদের JPA বা SQL কোয়েরি ব্যবহার করে ডেটাবেসের উপর সুনির্দিষ্ট অপারেশন পরিচালনা করতে সহায়ক। এছাড়াও, কাস্টম কোয়েরি লেখার মাধ্যমে আরো জটিল বা নির্দিষ্ট প্রয়োজনীয়তা পূরণ করা সম্ভব হয়। @Query অ্যানোটেশন স্প্রিং অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
Read more